package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/xormplus/xorm"
	"time"
)

var engine *xorm.Engine

func main() {

	var err error
	engine, err = xorm.NewMySQL(xorm.MYSQL_DRIVER,"root:shiws1203@tcp(127.0.0.1:3306)/go_zero_demo?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai")

	if err != nil {
		fmt.Println(err)
	}
	/*--------------------------------------------------------------------------------------------------
	1、使用RegisterSqlMap()注册SqlMap配置
	--------------------------------------------------------------------------------------------------*/

	//注册SqlMap配置，可选功能，如应用中无需使用SqlMap，可无需初始化
	//此处使用xml格式的配置，配置文件根目录为"./sql/oracle"，配置文件后缀为".xml"
	err = engine.RegisterSqlMap(xorm.Xml("./sql/mysql", ".xml"))
	if err != nil {
		fmt.Println(err)
	}
	engine.ShowSQL(true)

	defer engine.Close() //延迟关闭数据库
	/*-------------------------------------------------------------------------------------
	 * 第1种方式：返回的结果类型为 []map[string][]byte
	-------------------------------------------------------------------------------------*/
	sql_1_1 := "select * from user"
	results, err := engine.QueryString(sql_1_1)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(results)

	sql_id_4_1 := "sql_4_1" //配置文件中sql标签的id属性,SqlMap的key
	fmt.Println("hhhhhhhhhhhhhhhhhh")
	results41, err41 := engine.SqlMapClient(sql_id_4_1).Query().List()
	if err41 != nil {
		fmt.Println(err41)
	}
	fmt.Println(results41)

	sql_id_4_2 := "sql_4_2"
	results42, err42 := engine.SqlMapClient(sql_id_4_2, 7, 17).Query().List()
	if err42 != nil {
		fmt.Println(err42)
	}
	fmt.Println(results42)

	sql_id_4_3 := "sql_4_3"
	paramMap_4_3 := map[string]interface{}{"id": 1, "name": "abc123"}
	results43, err43 := engine.SqlMapClient(sql_id_4_3, &paramMap_4_3).Query().List()
	if err43 != nil {
		fmt.Println(err43)
	}
	fmt.Println(results43)


	type UserInfo struct {
		// 如果此处 `xorm:"id"`，则插入数据的时候，会默认为0，插入成功后不会把新插入的id返回，如果想得到插入后的主键id，则id不需要写`xorm:"id"`
		Id int64  `xorm:"pk 'id' autoincr"`
		Name string `xorm:"varchar(32)"`
		Salt string
		Age int
		Passwd string `xorm:"varchar(200)"`
		Created time.Time `xorm:"created"`
		Updated time.Time `xorm:"updated"`
	}
	//如果表不存在，会自动创建表
	err = engine.Sync2(new(UserInfo))
	if err != nil {
		fmt.Println(err)
	}

	u := &UserInfo{
		Name: "aaa",
		Salt: "abc123",
		Age: 16,
		Passwd: "abc123",
    }
    // 可插入多条engine.Insert(u1,u2)
	affecte, err := engine.Insert(u)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println("affect=", affecte, u.Id)





}
